#ifndef _DRIVER_SUPERC_H
#define _DRIVER_SUPERC_H

#include "task_lostcounter.h"
#include "task_communicate.h"
#include "driver_chassis.h"

#define USE_NEW_PROTOCOL        1

#define POWER_CHARGE_MAX      (100)           // 电容充电限制100w
#define POWER_DISCHARGE_MAX   (250)          // 电容放电最大功率250w
#define Power_delta    100.f //PID最大输出
#define super_cap_ref  35.f //充电时允许使用的缓冲能量阈值
#define Buffer_MAX 60.0f  //缓冲能量最大值

//电容PID控制的参数
#define SC_KP                   3.0f
#define SC_KI                   0.0000f
#define SC_KD                   0.f

//电容功率环前馈系数
#define Forward_K               0.8f

//send can id 312
//recv can id 311
typedef struct {        // 单位
    float V_IN;         // V
    float V_SC;         // V
    float I_IN_SC;      // A
    float I_CHASSIS;    // A
}SC_feedback_t;

typedef struct {
    uint8_t enable;
    float set_power_charge;     //发送给电容控制板数据，给电容充电为正，放电为负（单位 W）
}SC_set_t;

typedef struct {
    SC_feedback_t scFeedback;
    SC_set_t scSet;
    struct {
        float p_sc;			//电容发送回来的电容功率数据  充电为正
        float p_wheel;		//四轮电机功率
        float last_p_wheel;
    } power_fb;
} Super_Cap_t;


enum SuperCapState{    //电容充放电情况	0 电容没电	1 电容可用	2 电容满电
    FULL = 0,
    READY = 1,
    EMPTY = 2,
    SUPERC_ERROR = 3,
    SUPERC_DEBUG = 4
};

void SC_recv_message(uint8_t *data);
void super_cap_control(void);
float SC_get_power_wheel(void);
void SC_PID_Init(void);
float SC_charge_k();

#endif //_DRIVER_SUPERC_H
